Skip to content

[axonius][identity] Add Axonius Identity datastream#16620

Open
muskan-agarwal26 wants to merge 6 commits intoelastic:feature/axonius-0.1.0from
muskan-agarwal26:datastream-identity
Open

[axonius][identity] Add Axonius Identity datastream#16620
muskan-agarwal26 wants to merge 6 commits intoelastic:feature/axonius-0.1.0from
muskan-agarwal26:datastream-identity

Conversation

@muskan-agarwal26
Copy link
Copy Markdown
Contributor

@muskan-agarwal26 muskan-agarwal26 commented Dec 18, 2025

Proposed commit message

The release includes identity data stream and associated dashboard.

Axonius fields are mapped to their corresponding ECS fields where possible.

Test samples were derived from live data samples, which were subsequently
sanitized.

Checklist

  • I have reviewed tips for building integrations and this pull request is aligned with them.
  • I have verified that all data streams collect metrics or logs.
  • I have added an entry to my package's changelog.yml file.
  • I have verified that Kibana version constraints are current according to guidelines.
  • I have verified that any added dashboard complies with Kibana's Dashboard good practices

How to test this PR locally

To test the axonius package:

  • Clone integrations repo.
  • Install elastic package locally.
  • Start elastic stack using elastic-package.
  • Move to integrations/packages/axonius directory.
  • Run the following command to run tests.

elastic-package test

2025/12/18 17:48:46  INFO New version is available - v0.117.1. Download from: https://github.com/elastic/elastic-package/releases/tag/v0.117.1
Run asset tests for the package
2025/12/18 17:48:46  INFO License text found in "/root/GITHUB/integrations/LICENSE.txt" will be included in package
--- Test results for package: axonius - START ---
╭─────────┬─────────────┬───────────┬──────────────────────────────────────────────────────────────────┬────────┬──────────────╮
│ PACKAGE │ DATA STREAM │ TEST TYPE │ TEST NAME                                                        │ RESULT │ TIME ELAPSED │
├─────────┼─────────────┼───────────┼──────────────────────────────────────────────────────────────────┼────────┼──────────────┤
│ axonius │             │ asset     │ dashboard axonius-60472232-ca7b-45e6-9fa6-72e6efc41a8e is loaded │ PASS   │      1.422µs │
│ axonius │ identity    │ asset     │ index_template logs-axonius.identity is loaded                   │ PASS   │        348ns │
│ axonius │ identity    │ asset     │ ingest_pipeline logs-axonius.identity-0.1.0 is loaded            │ PASS   │        233ns │
╰─────────┴─────────────┴───────────┴──────────────────────────────────────────────────────────────────┴────────┴──────────────╯
--- Test results for package: axonius - END   ---
Done
Run pipeline tests for the package
--- Test results for package: axonius - START ---
╭─────────┬─────────────┬───────────┬─────────────────────────────────────────────────────┬────────┬──────────────╮
│ PACKAGE │ DATA STREAM │ TEST TYPE │ TEST NAME                                           │ RESULT │ TIME ELAPSED │
├─────────┼─────────────┼───────────┼─────────────────────────────────────────────────────┼────────┼──────────────┤
│ axonius │ identity    │ pipeline  │ (ingest pipeline warnings test-account.log)         │ PASS   │ 778.105629ms │
│ axonius │ identity    │ pipeline  │ (ingest pipeline warnings test-certificate.log)     │ PASS   │ 700.415371ms │
│ axonius │ identity    │ pipeline  │ (ingest pipeline warnings test-group.log)           │ PASS   │ 662.882359ms │
│ axonius │ identity    │ pipeline  │ (ingest pipeline warnings test-identity-common.log) │ PASS   │ 763.614554ms │
│ axonius │ identity    │ pipeline  │ (ingest pipeline warnings test-user.log)            │ PASS   │ 639.719729ms │
│ axonius │ identity    │ pipeline  │ test-account.log                                    │ PASS   │ 296.335698ms │
│ axonius │ identity    │ pipeline  │ test-certificate.log                                │ PASS   │ 309.327719ms │
│ axonius │ identity    │ pipeline  │ test-group.log                                      │ PASS   │ 308.939347ms │
│ axonius │ identity    │ pipeline  │ test-identity-common.log                            │ PASS   │ 291.192435ms │
│ axonius │ identity    │ pipeline  │ test-user.log                                       │ PASS   │ 316.869779ms │
╰─────────┴─────────────┴───────────┴─────────────────────────────────────────────────────┴────────┴──────────────╯
--- Test results for package: axonius - END   ---
Done
Run policy tests for the package
--- Test results for package: axonius - START ---
No test results
--- Test results for package: axonius - END   ---
Done
Run static tests for the package
--- Test results for package: axonius - START ---
╭─────────┬─────────────┬───────────┬──────────────────────────┬────────┬──────────────╮
│ PACKAGE │ DATA STREAM │ TEST TYPE │ TEST NAME                │ RESULT │ TIME ELAPSED │
├─────────┼─────────────┼───────────┼──────────────────────────┼────────┼──────────────┤
│ axonius │ identity    │ static    │ Verify sample_event.json │ PASS   │ 268.878426ms │
╰─────────┴─────────────┴───────────┴──────────────────────────┴────────┴──────────────╯
--- Test results for package: axonius - END   ---
Done
Run system tests for the package
2025/12/18 17:48:59  INFO Installing package...
2025/12/18 17:48:59  INFO License text found in "/root/GITHUB/integrations/LICENSE.txt" will be included in package
2025/12/18 17:49:01  INFO Running test for data_stream "identity" with configuration 'default'
2025/12/18 17:49:09  INFO Setting up independent Elastic Agent...
2025/12/18 17:49:20  INFO Setting up service...
2025/12/18 17:49:40  INFO Validating test case...
2025/12/18 17:49:42  INFO Tearing down service...
2025/12/18 17:49:43  INFO Write container logs to file: /root/GITHUB/integrations/build/container-logs/axonius-1766060383822768504.log
2025/12/18 17:49:47  INFO Tearing down agent...
2025/12/18 17:49:48  INFO Write container logs to file: /root/GITHUB/integrations/build/container-logs/elastic-agent-1766060388442966883.log
2025/12/18 17:50:15  INFO Uninstalling package...
--- Test results for package: axonius - START ---
╭─────────┬─────────────┬───────────┬───────────┬────────┬───────────────╮
│ PACKAGE │ DATA STREAM │ TEST TYPE │ TEST NAME │ RESULT │  TIME ELAPSED │
├─────────┼─────────────┼───────────┼───────────┼────────┼───────────────┤
│ axonius │ identity    │ system    │ default   │ PASS   │ 41.623316269s │
╰─────────┴─────────────┴───────────┴───────────┴────────┴───────────────╯
--- Test results for package: axonius - END   ---
Done

Related issues

Screenshots

image (5) image (6)

@muskan-agarwal26 muskan-agarwal26 changed the base branch from main to feature/axonius-0.1.0 December 18, 2025 12:22
@elastic-vault-github-plugin-prod
Copy link
Copy Markdown

Package microsoft_exchange_online_message_trace - 1.29.1 containing this change is available at https://epr.elastic.co/package/microsoft_exchange_online_message_trace/1.29.1/

@andrewkroh andrewkroh added Crest Contributions from Crest developement team. New Integration Issue or pull request for creating a new integration package. dashboard Relates to a Kibana dashboard bug, enhancement, or modification. documentation Improvements or additions to documentation. Applied to PRs that modify *.md files. Integration:axonius [Integration not found in source] labels Jan 8, 2026
@botelastic
Copy link
Copy Markdown

botelastic Bot commented Feb 7, 2026

Hi! We just realized that we haven't looked into this PR in a while. We're sorry! We're labeling this issue as Stale to make it hit our filters and make sure we get back to it as soon as possible. In the meantime, it'd be extremely helpful if you could take a look at it as well and confirm its relevance. A simple comment with a nice emoji will be enough :+1. Thank you for your contribution!

@botelastic botelastic Bot added the Stalled label Feb 7, 2026
@botelastic
Copy link
Copy Markdown

botelastic Bot commented Mar 9, 2026

Hi! This PR has been stale for a while and we're going to close it as part of our cleanup procedure. We appreciate your contribution and would like to apologize if we have not been able to review it, due to the current heavy load of the team. Feel free to re-open this PR if you think it should stay open and is worth rebasing. Thank you for your contribution!

@botelastic botelastic Bot closed this Mar 9, 2026
@cpascale43 cpascale43 reopened this Mar 9, 2026
@botelastic botelastic Bot removed the Stalled label Mar 9, 2026
@botelastic
Copy link
Copy Markdown

botelastic Bot commented Apr 8, 2026

Hi! We just realized that we haven't looked into this PR in a while. We're sorry! We're labeling this issue as Stale to make it hit our filters and make sure we get back to it as soon as possible. In the meantime, it'd be extremely helpful if you could take a look at it as well and confirm its relevance. A simple comment with a nice emoji will be enough :+1. Thank you for your contribution!

@botelastic botelastic Bot added the Stalled label Apr 8, 2026
@cpascale43 cpascale43 removed the Stalled label Apr 8, 2026
@muskan-agarwal26 muskan-agarwal26 marked this pull request as ready for review April 19, 2026 14:11
@muskan-agarwal26 muskan-agarwal26 requested a review from a team as a code owner April 19, 2026 14:11
Comment thread packages/axonius/manifest.yml Outdated
Comment thread packages/axonius/_dev/deploy/docker/files/config.yml
Comment thread packages/axonius/docs/README.md Outdated
Comment thread packages/axonius/data_stream/identity/elasticsearch/ingest_pipeline/default.yml Outdated
Comment thread packages/axonius/elasticsearch/transform/latest_identity/fields/fields.yml Outdated
:
string(resp.Status) + " (" + string(resp.StatusCode) + ")"
),
"asset_type": string(state.worklist.asset_type_list[0]),
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why does this need a string conversion?

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

No need, removing string conversion for this from everywhere in code.

Comment thread packages/axonius/_dev/deploy/docker/files/config.yml
Comment on lines +97 to +100
on_failure:
- append:
field: error.message
value: 'Processor {{{_ingest.on_failure_processor_type}}} with tag {{{_ingest.on_failure_processor_tag}}} in pipeline {{{_ingest.on_failure_pipeline}}} failed with message: {{{_ingest.on_failure_message}}}'
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Check that all date and convert processors will remove the field value on failure. This field is defined as a date so if it fails we have left an unmappable value in place.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can this be more concisely/manageably expressed with some/most of the processors replaced with a script

Comment thread packages/axonius/changelog.yml Outdated
Comment on lines +2 to +6
- version: 0.1.1
changes:
- description: Add support for identity data stream.
type: enhancement
link: https://github.com/elastic/integrations/pull/16620
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This should be in the 0.1.1 changes. This is not being merged into main in this PR.

Comment thread packages/axonius/manifest.yml Outdated
name: axonius
title: Axonius
version: 0.1.0
version: 0.1.1
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
version: 0.1.1
version: 0.1.0

"id": "axonius-60472232-ca7b-45e6-9fa6-72e6efc41a8e",
"references": [
{
"id": "metrics-*",
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

logs?

"type": "index-pattern"
},
{
"id": "metrics-*",
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

logs? Also, duplicate of the index-pattern at L1275.

Comment on lines +1334 to +1338
{
"id": "logs-*",
"name": "kibanaSavedObjectMeta.searchSourceJSON.filter[1].meta.index",
"type": "index-pattern"
}
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Duplicate of pattern at L1279.

Comment thread packages/axonius/elasticsearch/transform/latest_identity/fields/fields.yml Outdated
@andrewkroh andrewkroh removed the New Integration Issue or pull request for creating a new integration package. label Apr 20, 2026
name: '{{ IngestPipeline "pipeline-account" }}'
tag: pipeline-account
if: >-
ctx.axonius?.identity?.asset_type.contains('accounts')
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟠 High ingest_pipeline/default.yml:605

The pipeline routing conditions on lines 605, 610, 615, and 620 use ctx.axonius?.identity?.asset_type.contains(...) which throws a NullPointerException when asset_type is null. The optional chaining only guards axonius and identity; once identity exists, the expression evaluates to null.contains(...) when asset_type is missing. This causes the entire pipeline to fail and fall through to on_failure, leaving documents incompletely processed. Consider adding null guards like ctx.axonius?.identity?.asset_type != null && ctx.axonius.identity.asset_type.contains('accounts') for all four conditions.

-        ctx.axonius?.identity?.asset_type.contains('accounts')
+        ctx.axonius?.identity?.asset_type != null && ctx.axonius.identity.asset_type.contains('accounts')
🤖 Copy this AI Prompt to have your agent fix this:
In file packages/axonius/data_stream/identity/elasticsearch/ingest_pipeline/default.yml around line 605:

The pipeline routing conditions on lines 605, 610, 615, and 620 use `ctx.axonius?.identity?.asset_type.contains(...)` which throws a `NullPointerException` when `asset_type` is null. The optional chaining only guards `axonius` and `identity`; once `identity` exists, the expression evaluates to `null.contains(...)` when `asset_type` is missing. This causes the entire pipeline to fail and fall through to `on_failure`, leaving documents incompletely processed. Consider adding null guards like `ctx.axonius?.identity?.asset_type != null && ctx.axonius.identity.asset_type.contains('accounts')` for all four conditions.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This assessment is correct; there is no previous condition or action that guarantees that asset_type is not absent or null. An alternative fix is to use ctx.axonius?.identity?.asset_type?.contains('accounts') == true.

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thank you for confirming the issue and suggesting the alternative approach. The ?.contains(...) == true pattern is indeed cleaner and more concise.

Would you like me to fix all four conditions (lines 605, 610, 615, and 620) using this approach?

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Leave all fixes for the author.

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Understood. I'll leave this for the author to fix.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Keeping it as is.

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Sorry, I'm unable to act on this request because you do not have permissions within this repository.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@muskan-agarwal26 This should be fixed.

Comment on lines +971 to +972
type: boolean
description: Indicates if auto-delete days for cloud recordings is configured.
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟡 Medium fields/fields.yml:971

axonius.identity.recording.auto_delete_cmr_days is defined as type: boolean, but the field name indicates it should store a numeric day count. When the Zoom API sends an integer like 30, the ingest pipeline's boolean conversion coerces it to true, silently dropping the actual value. Consider changing the type to long and removing this field from the boolean conversion script in pipeline-user.yml.

            - name: auto_delete_cmr_days
-              type: boolean
+              type: long
🤖 Copy this AI Prompt to have your agent fix this:
In file packages/axonius/elasticsearch/transform/latest_identity/fields/fields.yml around lines 971-972:

`axonius.identity.recording.auto_delete_cmr_days` is defined as `type: boolean`, but the field name indicates it should store a numeric day count. When the Zoom API sends an integer like `30`, the ingest pipeline's boolean conversion coerces it to `true`, silently dropping the actual value. Consider changing the type to `long` and removing this field from the boolean conversion script in `pipeline-user.yml`.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Do we have a test that exercises this? Is it documented somewhere? I don't see it in any tests.

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

No tests currently exercise this field. I found it in the boolean conversion script at pipeline-user.yml line 775, where it's listed alongside other recording.* fields to be converted to boolean. The field is documented as type boolean with description "Indicates if auto-delete days for cloud recordings is configured." However, the field name auto_delete_cmr_days suggests it should store the actual day count (e.g., 30, 60, 90), not just a boolean flag—that's what the companion field auto_delete_cmr is for.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The comment was actually directed to @muskan-agarwal26.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

yes, in live logs, we are getting value as true or false, hence it is kept boolean

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Sorry, I'm unable to act on this request because you do not have permissions within this repository.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@muskan-agarwal26 Please make it so that this is exercised in our pipeline tests.

Comment thread packages/axonius/elasticsearch/transform/latest_identity/fields/fields.yml Outdated
@muskan-agarwal26 muskan-agarwal26 requested a review from efd6 April 21, 2026 12:57
Copy link
Copy Markdown
Contributor

@efd6 efd6 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please address https://github.com/elastic/integrations/pull/16620/changes#r3107948170 and the macroscopeapp concerns.

@muskan-agarwal26
Copy link
Copy Markdown
Contributor Author

@efd6 I have addressed the comment: https://github.com/elastic/integrations/pull/16620/changes#r3107948170 , used script processors to reduce the count of processors.

@muskan-agarwal26 muskan-agarwal26 requested a review from efd6 April 22, 2026 14:17
@efd6
Copy link
Copy Markdown
Contributor

efd6 commented Apr 23, 2026

I have addressed the comment: https://github.com/elastic/integrations/pull/16620/changes#r3107948170 , used script processors to reduce the count of processors.

I don't see any change in the size of that file.

@muskan-agarwal26
Copy link
Copy Markdown
Contributor Author

I have addressed the comment: https://github.com/elastic/integrations/pull/16620/changes#r3107948170 , used script processors to reduce the count of processors.

I don't see any change in the size of that file.

It is actually reduced, it can be viewed in this commit: 8b75b00

@andrewkroh andrewkroh removed dashboard Relates to a Kibana dashboard bug, enhancement, or modification. Integration:axonius [Integration not found in source] labels Apr 23, 2026
@muskan-agarwal26
Copy link
Copy Markdown
Contributor Author

@efd6 , please have a look at my comment: #16620 (comment)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Crest Contributions from Crest developement team. documentation Improvements or additions to documentation. Applied to PRs that modify *.md files.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants